What is koa-router?
koa-router is a powerful routing middleware for Koa, a next-generation web framework for Node.js. It allows you to define routes for your web application, handle HTTP methods, and manage middleware in a clean and organized manner.
What are koa-router's main functionalities?
Basic Routing
This code demonstrates how to set up a basic route using koa-router. When a GET request is made to the root URL '/', it responds with 'Hello World!'.
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
router.get('/', (ctx, next) => {
ctx.body = 'Hello World!';
});
app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000);
Route Parameters
This code demonstrates how to use route parameters with koa-router. When a GET request is made to '/users/:id', it responds with the user ID provided in the URL.
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
router.get('/users/:id', (ctx, next) => {
const userId = ctx.params.id;
ctx.body = `User ID: ${userId}`;
});
app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000);
Middleware
This code demonstrates how to use middleware with koa-router. The logger middleware logs the HTTP method and URL of each request before passing control to the next middleware or route handler.
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
const logger = async (ctx, next) => {
console.log(`${ctx.method} ${ctx.url}`);
await next();
};
router.get('/', logger, (ctx, next) => {
ctx.body = 'Hello World!';
});
app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000);
Nested Routes
This code demonstrates how to create nested routes with koa-router. The nestedRouter handles requests to '/nested/info' and responds with 'Nested Route Info'.
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
const nestedRouter = new Router();
nestedRouter.get('/info', (ctx, next) => {
ctx.body = 'Nested Route Info';
});
router.use('/nested', nestedRouter.routes(), nestedRouter.allowedMethods());
app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000);
Other packages similar to koa-router
express
Express is a fast, unopinionated, minimalist web framework for Node.js. It provides robust routing capabilities similar to koa-router but is more widely used and has a larger ecosystem of middleware and plugins.
hapi
Hapi is a rich framework for building applications and services. It provides powerful configuration-based routing and extensive support for building scalable and maintainable applications. Compared to koa-router, Hapi offers more built-in features and a more opinionated structure.
restify
Restify is a framework specifically designed for building RESTful web services. It provides a similar routing mechanism to koa-router but is optimized for building APIs with a focus on performance and scalability.
Router middleware for Koa.

- Express-style routing (
app.get
, app.put
, app.post
, etc.) - Named URL parameters
- Named routes with URL generation
- Responds to
OPTIONS
requests with allowed methods - Support for
405 Method Not Allowed
and 501 Not Implemented
- Multiple route middleware
- Multiple and nestable routers
async/await
support
Migrating to 7 / Koa 2
- The API has changed to match the new promise-based middleware
signature of koa 2. See the koa 2.x readme for more
information.
- Middleware is now always run in the order declared by
.use()
(or .get()
,
etc.), which matches Express 4 API.
Installation
npm i @koa/router
yarn add @koa/router
Contributing
Please submit all issues and pull requests to the koajs/router repository!
Support
If you have any problem or suggestion please open an issue here.
Call for Maintainers
This module is forked from the original koa-router due to its lack of activity. koa-router
is the most widely used router module in the Koa community and we need maintainers. If you're interested in fixing bugs or implementing new features feel free to open a pull request. We'll be adding active contributors as collaborators.
Thanks to the original authors @alexmingoia and the original team for their great work.
License
MIT